#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Create by zhang
# Create on 2022/6/24 17:42
from domain.report.common.period_enum import PeriodEnum
from domain.report.dto.cash_dto import CashDTO
from domain.report.repository.cash_repository import get


class Cash(CashDTO):
    def __init__(self, dto:CashDTO=None):
        super(Cash, self).__init__()
        if dto:
            self.__dict__ = dto.__dict__

    @classmethod
    def query(cls, stock_code:str, year:int, period:PeriodEnum, is_consolidate:bool=False):
        dto = get(stock_code, year, period, is_consolidate)
        entity = Cash()
        entity.__dict__ = dto.__dict__
        return entity

    def operating_cash_flow_to_capital_expenditure(self):
        """
        再投资比率（operating cash flow to capital expenditure）是指企业一定时期经营活动产生的现金净流量与资本支出（主要是固定资产投资）的比率。
        再投资比率 = 经营活动现金净流量/资本性支出
        在投资比率反映了企业当期经营活动产生的现金净流量是否足以支付资本性支出所需现金。
        如果这一比率过低，则表明企业的经营活动不能满足企业资本性支出的现金需求，需要依靠筹资活动产生的现金流入来补充资金的不足。
        """
        return self.n_cashflow_act/self.sub_total_cash_out_invest

    def operating_cash_flow_to_expired_debts_and_interests(self):
        """
        到期债务本息偿付比率（operating cash flow to expired debts and interests）是指企业的经营活动现金净流量对本期到期债务和利息支出的现金满足程度
        到期债务本息偿付比率 = 经营活动现金净流量/（本期到期债务 + 利息支出）
        到期债务本息偿付比率越大，表明企业偿付到期债务的能力就越强；
        到期债务本息偿付比率小于1，则表明企业经营活动产生的现金不足以偿付到期债务本息，企业必须依靠投资活动与筹资活动的现金流入才能足够偿还债务。
        """
        return self.n_cashflow_act/(self.cash_pay_for_debt + self.c_pay_dist_dpcp_int_exp)

    def cash_paid_div_sale(self):
        """
        现金购销比率（cash paid to suppliers / cash from sales）
        现金购销比率 = 购买商品、接受劳务支付的现金/销售商品、出售劳务收到的现金
        再企业正常经营的情况下，这一比率应该对应于利润表中营业成本率（成本费用总额/营业收入总额）。这一比率过大或过小，都应该引起读者的注意。
        当然，企业所处发展阶段不同，信用政策不同，市场环境不同，此比率所揭示的意义也不同。
        """
        return self.c_paid_goods_s/self.cash_received_of_sales_service